package net.aaa.hotel.controller;

import net.aaa.hotel.dao.HTypeDao;
import net.aaa.hotel.dao.ITorderDao;
import net.aaa.hotel.dao.TRuzhudetailDao;
import net.aaa.hotel.dao.TXufangDao;
import net.aaa.hotel.entity.TXufang;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("xufang")
public class XuFangController {
    @Autowired
    private HTypeDao hTypeDao;
    @Autowired
    TXufangDao xufangDao;
    @Autowired
    ITorderDao iTorderDao;
    @Autowired
    TRuzhudetailDao ruzhudetailDao;
    @RequestMapping("findTypeById")
    @ResponseBody
    public Map getTypeListById(Integer typeid) {
    //    System.out.println(typeid);
        Map map = hTypeDao.searchType(typeid + "");
        // 获得对应设施的表应该放在哪个dao中
        // 获得到对应的设施后 应该对获得到的数据进行处理的到对应的设施列表  设施表 getTypeSheshi
        Map msg = new HashMap();
        msg.put("typeMess", map);
   //     System.out.println("----------");
        //获取订房的时间
        List l = hTypeDao.getManDate(typeid);
        if (l.size() > 0) {
            //生成当前时间和 最大的订房时间之间的时间段
            Date date = new Date();
            String format = new SimpleDateFormat("yyyy-MM-dd").format(date);
            hTypeDao.getNowAndMaxBetweenTime(format, l.get(0) + "");
            //查询这个时间段之内的所有的时间
            List<Map> mapList = hTypeDao.getAllDate();
            //查询这个时间段之内每天预定的房间数  以及已满的时间
            Map allList = hTypeDao.getDateOrder(mapList, typeid);
            //将信息存到map里面然后返回个前台
        //    System.out.println(allList.size());
            msg.put("orderMess", allList);
        } else {
            //如果为空就证明还没有于预定过房间
            System.out.println("所有房间都未预定");
        }
        return msg;
    }


    /**
     * 预定房间
     *
     * @return
     */

    @RequestMapping("addRuZhu")
    @ResponseBody
    public String addOrder(TXufang xufang, HttpServletRequest req) {
        // 判断是否能够再次续房

        // System.out.println(order);
        Integer roomtype = Integer.parseInt(req.getParameter("roomtype") + "");


        //根据预定的入住时间和离开时间  获取这中间的日期
        // 在内部调用的只有xufang.getBeginTime() order.getEndTime()
        xufangDao.getDate(xufang);
        //根据插入的时间查询当前的房间
        List<Map> mapList = hTypeDao.getAllDate();

        //查询这个时间段之内每天预定的房间数  以及已满的房间数
        // 根据续房详情中的传入的入住id 查找到对应的房间类型
        Integer orderid = Integer.parseInt(req.getParameter("orderid") + "");
        Map info = iTorderDao.getInfoByOrderid(orderid);
        Integer count = Integer.parseInt(info.get("count")+"");
        Map allList = hTypeDao.getDateOrder(mapList, roomtype);
        //如果预定的房间数大于这个剩余的房间数的最小值 就 不能预定成功

        // 获取当前订单的所定房间的数量

        List<Map> mapsDate = (List<Map>) allList.get("srDate");//[{date1:1},{date2:2}]
        boolean f = true;
        for (Map map : mapsDate) {
            //map里面存放的格式是  时间:数量（剩余的房间的数量）
            for (Object o : map.keySet()) {
                //o是时间
                int synum = Integer.parseInt(map.get(o) + "");
//                对比一下当前预定的数量是否>剩余的数量  如果大于就直接return 0 （不能预定）
                if(count>synum){
                    //return "0";
                    f=false;//不能预定了
                }
            }
        }
        if (f) {
            //将数据添加刀数据库里面
            int i=xufangDao.addXuFangRecord(xufang);
            // 修改订单状态
            int status = ruzhudetailDao.changeRuzhuDetailStatusBy(xufang.getRuzhuid(), 1);
            return i+status+"";
        } else {
            //不能预定了
            return "-1";
        }
    }
}
